/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.academik.controller;

import java.io.IOException;
import java.io.Serializable;
import java.math.BigInteger;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.component.UIComponent;
import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;
import javax.faces.model.SelectItem;
import javax.servlet.ServletContext;
import org.academik.model.Alumno;
import org.academik.model.Anioescolar;
import org.academik.model.Catalogoservicios;
import org.academik.model.Compromiso;
import org.academik.model.Detallerecibo;
import org.academik.model.DetallereciboId;
import org.academik.model.Estadoalumno;
import org.academik.model.Lugtrabajo;
import org.academik.model.Matricula;
import org.academik.model.Persona;
import org.academik.model.Recibo;
import org.academik.model.Recordanecdotico;
import org.academik.model.Seccion;
import org.academik.model.Serie;
import org.academik.util.FacesUtil;
import org.academik.util.HibernateUtil;
import org.hibernate.Criteria;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.StatelessSession;
import org.hibernate.Transaction;
import org.hibernate.criterion.Restrictions;
import org.primefaces.event.SelectEvent;

/**
 *
 * @author Javier
 */
@ManagedBean(name = "matriculaBean")
@ViewScoped
public class MatriculaBean extends AbstractViewScopedBean implements Serializable {

    /** Declaracion de Variables*/
    private Persona responsable;
    private String buscarResponsable;
    private Lugtrabajo lugarTrabResponsable;
    private Matricula matricula;
    private ArrayList<SelectItem> grados;
    private Compromiso compromiso;
    private ArrayList<Compromiso> compromisos;
    private Compromiso selectedCompromiso;
    private String buscarAlumno;
    private Persona personaAlumno;
    private boolean asignarRecibo;
    private boolean boMostrarRecibo;
    private Recibo recibo;
    private Recordanecdotico record;
    private Long selectedSeccion;
    private boolean boEditarMatricula;
    private ArrayList<Object[]> arregloMatriculas;
    private Object[] selectedMatricula;
    private Detallerecibo detalleRecibo;
    private Long selectedConcepto;
    private ArrayList<Object[]> arregloDetalles;
    private double totalPagar;
    private Object[] selectedPago;
    private ArrayList<Object[]> arregloPagos;
    private String detalleConcepto;
    private ArrayList<Object[]> listaMatricula;
    private Alumno alumno;
    private boolean cargarPersona;
    private boolean cargarLugTrabajo;
    private String url;
    private boolean boInscripcion;
    private boolean boEditar;
    private boolean showAddDetalle;

    /** Creates a new instance of MatriculaBean */
    public MatriculaBean() {
        this.nuevo();
        this.populateListaMatricula();
    }

    @Override
    public void crear() {
        Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction tx = null;
        long correlativo = this.numeracion().longValue() + 1;
        try {
            tx = (Transaction) session.beginTransaction();

            //Almacena los datos del responsable
            this.responsable.setBoResponsable(true);
            if (this.cargarPersona) {
                session.update(this.responsable);
            } else {
                session.save(this.responsable);
            }

            this.lugarTrabResponsable.setPersona(this.responsable);
            session.saveOrUpdate(this.responsable);

            Iterator iterMatricula = this.arregloMatriculas.iterator();
            long i = 0;
            while (iterMatricula.hasNext()) {
                Object[] obj = (Object[]) iterMatricula.next();

                //Almacena los datos del recibo
                Recibo r = (Recibo) obj[3];
                boolean aRecibo = ((Boolean) obj[10]).booleanValue();
                Serie sr = (Serie) session.load(Serie.class, new Long(1));

                if (!aRecibo) {
                    sr.setNuUltimoValor(correlativo + i);
                    r.setNuNumRecibo(correlativo + i);
                    i++;
                }

                session.saveOrUpdate(sr);
                r.setSerie(sr);
                r.setDaFechImpresion(new Date());
                r.setVcConcepto("Proyecto educativo");



                session.saveOrUpdate(r);

                //Alamacena el detalle del recibo
                ArrayList<Object[]> listaDetalles = (ArrayList<Object[]>) obj[8];
                Iterator iterDetalle = listaDetalles.iterator();
                while (iterDetalle.hasNext()) {
                    Object[] obj_2 = (Object[]) iterDetalle.next();
                    Detallerecibo detalle = (Detallerecibo) obj_2[1];
                    Long idServicio = (Long) obj_2[2];
                    //Catalogoservicios servicio = (Catalogoservicios) session.load(Catalogoservicios.class, idServicio);
                    DetallereciboId idDetalle = new DetallereciboId();
                    idDetalle.setReciboIdRecibo(r.getIdRecibo());
                    idDetalle.setCatalogoServiciosIdCatalogoServicios(idServicio);
                    detalle.setRecibo(r);
                    detalle.setId(idDetalle);
                    session.saveOrUpdate(detalle);
                }

                //Almacena los datos de la matricula
                Matricula m = (Matricula) obj[0];
                Persona pa = (Persona) obj[1];
                Long idSeccion = (Long) obj[4];

                Criteria cAlumno = session.createCriteria(Alumno.class);
                cAlumno.add(Restrictions.eq("persona", pa));
                Alumno al = (Alumno) cAlumno.uniqueResult();
                al.setVcEstado("A");
                session.save(al);
                Estadoalumno ea = new Estadoalumno();
                ea.setAlumno(al);
                ea.setVcFecMovimiento(new Date());
                ea.setVcRazon("Matricula");
                ea.setVcTipMovimiento("Matricula"); //OJO colocar un combobox en el dialogo de matricula para elegir si es reingreso o matricula ordinaria
                session.save(ea);

                Seccion s = (Seccion) session.load(Seccion.class, idSeccion);

                m.setAlumno(al);
                m.setRecibo(r);
                m.setPersona(this.responsable);
                m.setSeccion(s);
                m.setDaFechMatricula(new Date());
                session.saveOrUpdate(m);

                //Almancena los datos del compromiso si extiste alguno
                ArrayList<Compromiso> listaCompromisos = (ArrayList<Compromiso>) obj[2];
                Iterator iterCompromiso = listaCompromisos.iterator();
                if (iterCompromiso.hasNext()) {
                    Recordanecdotico rd = (Recordanecdotico) obj[5];
                    rd.setMatricula(m);
                    session.saveOrUpdate(rd);
                    while (iterCompromiso.hasNext()) {
                        Compromiso cp = (Compromiso) iterCompromiso.next();
                        cp.setRecordanecdotico(rd);
                        cp.setDaFecCompromiso(new Date());
                        session.saveOrUpdate(cp);
                    }
                }
            }
            session.flush();
            session.clear();
            tx.commit();
            this.nuevo();
            try {
                ExternalContext ctx = FacesContext.getCurrentInstance().getExternalContext();
                String ctxPath = ((ServletContext) ctx.getContext()).getContextPath();
                ctx.redirect(ctxPath + "/faces/frmConsultaMatricula.xhtml");
            } catch (IOException ex) {
                Logger.getLogger(MatriculaBean.class.getName()).log(Level.SEVERE, null, ex);
            }
            FacesContext.getCurrentInstance().addMessage(null,
                    new FacesMessage(FacesMessage.SEVERITY_INFO, "Información:", "El nivel se creo satisfactoriamente"));
        } catch (HibernateException e) {
            tx.rollback();
            e.printStackTrace();
            FacesUtil.hibernateException(e);
        } finally {
            session.close();
        }
    }

    public BigInteger numeracion() {
        BigInteger result;
        StatelessSession session = HibernateUtil.getSessionFactory().openStatelessSession();
        String sql = "SELECT nuUltimoValor from serie";
        Query hQuery = session.createSQLQuery(sql);
        result = (BigInteger) hQuery.uniqueResult();
        session.close();
        return result;
    }

    @Override
    public void eliminar() {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public void cargarOpciones() {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public void cargarOpciones(int id) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public void buscar() {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public void modificar() {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public void cargarResgistros() {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public void nuevo() {
        this.responsable = new Persona();
        this.lugarTrabResponsable = new Lugtrabajo();
        this.buscarResponsable = null;
        this.matricula = new Matricula();
        this.grados = new ArrayList<SelectItem>();

        this.compromiso = new Compromiso();
        this.compromisos = new ArrayList<Compromiso>();
        this.selectedCompromiso = new Compromiso();
        this.buscarAlumno = null;
        this.personaAlumno = new Persona();
        this.asignarRecibo = false;
        this.boMostrarRecibo = false;
        this.recibo = new Recibo();
        this.record = new Recordanecdotico();
        this.selectedSeccion = null;
        this.boEditarMatricula = false;
        this.arregloMatriculas = new ArrayList<Object[]>();
        this.selectedMatricula = null;

        this.detalleRecibo = new Detallerecibo();
        this.selectedConcepto = null;
        this.arregloDetalles = new ArrayList<Object[]>();
        this.totalPagar = 0;
        this.selectedPago = new Object[2];
        this.arregloPagos = new ArrayList<Object[]>();
        this.detalleConcepto = null;
        this.listaMatricula = new ArrayList<Object[]>();
        this.alumno = new Alumno();
        this.cargarPersona = false;
        this.cargarLugTrabajo = false;
        this.boInscripcion = false;

        this.boEditar = false;
        this.showAddDetalle = false;
    }

    /**
     * Metodos para control de la vista
     */
    /*Metodo para el autoComplete*/
    public void onSelectNomPadre(SelectEvent event) {
        this.onKeyPress();
    }

    /**Cargar datos en los formularios una vez se seleccione el nombre del campo de tipo autocomplete*/
    private void onKeyPress() {
        Session session = HibernateUtil.getSessionFactory().openSession();
        String sql = "SELECT p FROM Persona p "
                + "WHERE CONCAT_WS(' ',p.vcNombres,p.vcApellidos) "
                + "LIKE :valor AND (p.boPadre = TRUE OR p.boResponsable = TRUE)";
        String tipoPersona = (String) UIComponent.getCurrentComponent(FacesContext.getCurrentInstance()).getAttributes().get("tipoPersona");
        if ("Alumno".equals(tipoPersona)) {
            sql = "SELECT p FROM Persona p "
                    + "WHERE CONCAT_WS(' ',p.vcNombres,p.vcApellidos) "
                    + "LIKE :valor AND p.boAlumno = TRUE";
        }

        Query query = session.createQuery(sql);
        if ("Alumno".equals(tipoPersona)) {
            query.setParameter("valor", "%" + this.buscarAlumno + "%");
            query.setMaxResults(1);
        } else {
            query.setParameter("valor", "%" + this.buscarResponsable + "%");
            query.setMaxResults(1);
        }

        if ("Alumno".equals(tipoPersona)) {
            this.personaAlumno = (Persona) query.uniqueResult();
        } else if (query.uniqueResult() != null) {
            Persona tempPersona = (Persona) query.uniqueResult();
            //this.responsable = (Persona) session.load(Persona.class, tempPersona.getIdPersona());
            this.responsable = (Persona) query.uniqueResult();



            this.cargarPersona = true;
            Iterator iterLugTrabajo = this.responsable.getLugtrabajos().iterator();
            if (iterLugTrabajo.hasNext()) {
                this.cargarLugTrabajo = true;
                this.lugarTrabResponsable = (Lugtrabajo) iterLugTrabajo.next();
            }
        }
        session.close();
    }

    public void nuevoAlumno() {
        this.buscarAlumno = null;
        this.personaAlumno = new Persona();
        this.alumno = new Alumno();
        this.matricula = new Matricula();
        this.selectedSeccion = null;
        this.asignarRecibo = false;
        this.boMostrarRecibo = false;
        this.recibo = new Recibo();
        this.recibo.setNuCantidadDeuda(0.0);
        this.compromiso = new Compromiso();
        this.compromisos = new ArrayList<Compromiso>();
        this.selectedCompromiso = new Compromiso();
        this.selectedConcepto = null;
        this.detalleRecibo = new Detallerecibo();
        this.detalleRecibo.setNuCantidad(0.0);
        this.detalleRecibo.setNuPrecio(0.0);
        this.arregloDetalles = new ArrayList<Object[]>();
        this.selectedPago = new Object[2];
        this.totalPagar = 0;
        this.boEditarMatricula = false;
    }

    /** Limpiar Formulario Responsable*/
    public void limpiarFrmResponsable() {
        this.responsable = new Persona();
        this.lugarTrabResponsable = new Lugtrabajo();
        this.buscarResponsable = null;
        this.cargarLugTrabajo = false;
        this.cargarPersona = false;
    }

    /** Vaciar variables */
    public void vaciarMatricula() {
        this.matricula = new Matricula();
        this.compromiso = new Compromiso();
        this.compromisos = new ArrayList<Compromiso>();
        this.buscarAlumno = null;
        this.personaAlumno = new Persona();
    }

    /** Agregar compromiso y mostrarlo en la vista*/
    public void addCompromiso() {
        this.compromisos.add(this.compromiso);
        this.compromiso = new Compromiso();
    }

    /** Remover compromiso y actualizar en la vista*/
    public void removeCompromiso() {
        this.compromisos.remove(this.selectedCompromiso);
    }

    /** Mostrar ingresar de forma manual el recibo*/
    public void onCheckAsignarRecibo() {
        if (this.asignarRecibo) {
            this.boMostrarRecibo = true;
        } else {
            this.boMostrarRecibo = false;
        }
    }

    /** Extraer que año se encuentra como lectivo en la BD*/
    public Anioescolar anioLectivo() {
        Anioescolar tempAnio = new Anioescolar();
        Session session = HibernateUtil.getSessionFactory().openSession();
        Criteria cAnioLectivo = session.createCriteria(Anioescolar.class);
        cAnioLectivo.add(Restrictions.eq("boEstado", true));
        tempAnio = (Anioescolar) cAnioLectivo.uniqueResult();
        session.close();
        return tempAnio;
    }

    /** Cargar Secciones en el formato Grado Seccion*/
    public ArrayList<SelectItem> cargarSecciones() {
        Session session = HibernateUtil.getSessionFactory().openSession();
        ArrayList<SelectItem> lista = new ArrayList<SelectItem>();

        Criteria cSeccion = session.createCriteria(Seccion.class);
        cSeccion.add(Restrictions.eq("anioescolar", this.anioLectivo()));

        Iterator iter = cSeccion.list().iterator();

        while (iter.hasNext()) {
            Seccion s = (Seccion) iter.next();
            lista.add(new SelectItem(s.getIdSeccion(), s.getGrado().getVcNomGrado() + " " + s.getVcSeccion(), ""));
        }
        session.close();
        return lista;
    }

    /** Cargar Conceptos en el campo concepto*/
    public ArrayList<SelectItem> cargarConceptos() {
        Session session = HibernateUtil.getSessionFactory().openSession();
        ArrayList<SelectItem> lista = new ArrayList<SelectItem>();

        Criteria cCatalogo = session.createCriteria(Catalogoservicios.class);
        Iterator iter = cCatalogo.list().iterator();

        while (iter.hasNext()) {
            Catalogoservicios s = (Catalogoservicios) iter.next();
            lista.add(new SelectItem(s.getIdCatalogoServicios(), s.getVcConceptoServicio(), ""));
        }
        session.close();
        return lista;
    }

    /** Convierte Date a String*/
    public String getStringDate(Date d) {
        if (d == null) {
            return "";
        }
        return FacesUtil.getStringDate(d);
    }

    /** Agregar pago a la matricula*/
    public void addPago() {
        Object[] obj = new Object[3];
        obj[0] = this.arregloDetalles;
        this.recibo.setBoPendientePago(false);
        if (this.recibo.getNuCantidadDeuda() > 0) {
            this.recibo.setBoPendientePago(true);
        }

        obj[1] = this.recibo;
        obj[2] = this.totalPagar;
        this.arregloPagos.add(obj);

        this.vaciarPagos();
    }

    /** Cuando seleccione un concepto actualice el concepto*/
    public void onChangeConcepto() {
        if (this.selectedConcepto != null) {
            Session session = HibernateUtil.getSessionFactory().openSession();
            Criteria cCatalogo = session.createCriteria(Catalogoservicios.class);
            cCatalogo.add(Restrictions.eq("idCatalogoServicios", this.selectedConcepto));
            Catalogoservicios cs = (Catalogoservicios) cCatalogo.uniqueResult();
            this.detalleRecibo.setCatalogoservicios(cs);
            this.detalleRecibo.setNuPrecio(cs.getNuPrecioDefault());
            this.detalleConcepto = cs.getVcConceptoServicio();
            session.close();
            this.showAddDetalle = true;
        } else {
            this.vaciarPagos();
        }
    }

    /** Agregar Pagos*/
    public void addDetallesRecibo() {
        Object[] objPago = new Object[3];
        objPago[0] = this.detalleConcepto;
        objPago[1] = this.detalleRecibo;
        objPago[2] = this.selectedConcepto;
        this.totalPagar += this.detalleRecibo.getNuPrecio() * this.detalleRecibo.getNuCantidad();
        this.arregloDetalles.add(objPago);
        this.vaciarPagos();
    }

    /** Remover detalles pago*/
    public void removeDetalles() {
        this.detalleRecibo = (Detallerecibo) this.selectedPago[1];
        this.arregloDetalles.remove(this.selectedPago);
        this.totalPagar -= this.detalleRecibo.getNuPrecio() * this.detalleRecibo.getNuCantidad();
        this.selectedPago = new Object[2];
        this.detalleRecibo = new Detallerecibo();
        this.detalleConcepto = null;
    }

    /** Vaciar variables de detalles pagos*/
    public void vaciarPagos() {
        this.detalleRecibo = new Detallerecibo();
        this.detalleRecibo.setNuCantidad(0.0);
        this.detalleRecibo.setNuPrecio(0.0);
        this.detalleConcepto = null;
        this.selectedConcepto = null;
        this.showAddDetalle = false;
    }

    /** Si cerro la ventana si dar clic en aceptar*/
    public void cancelarPago() {
        this.vaciarPagos();
        this.totalPagar = 0;
        this.arregloDetalles = new ArrayList<Object[]>();
        this.recibo = new Recibo();
        this.boEditarMatricula = false;
    }

    /** Agregar alumnos a matricular*/
    public void addMatricula() {
        Session session = HibernateUtil.getSessionFactory().openSession();

        Seccion tempSeccion = (Seccion) session.load(Seccion.class, this.selectedSeccion);
        this.record.setVcTipo("Compromiso");
        this.record.setDaFecRegistro(new Date());
        this.record.setVcObservacion("");


        if (this.boEditarMatricula) {
            this.addPago();
        }

        Object[] objMatricula = new Object[17];
        objMatricula[0] = this.matricula;
        objMatricula[1] = this.personaAlumno;
        objMatricula[2] = this.compromisos; //Lista de Compromisos
        Object[] tempPagos = (Object[]) this.arregloPagos.get(0);   //Saca del arregloPagos y lo asigna a tempPagos            
        objMatricula[3] = (Recibo) tempPagos[1];                    //para luego asignarlo a la variable correspondiente
        objMatricula[4] = this.selectedSeccion;
        objMatricula[5] = this.record;
        objMatricula[6] = this.responsable;

        objMatricula[7] = tempSeccion.getGrado().getVcNomGrado() + " " + tempSeccion.getVcSeccion();
        objMatricula[8] = (ArrayList<Object[]>) tempPagos[0];
        objMatricula[9] = ((Double) tempPagos[2]).doubleValue();
        objMatricula[10] = this.boMostrarRecibo;

        if (this.boEditarMatricula) {
            this.arregloMatriculas.set(this.arregloMatriculas.indexOf(this.selectedMatricula), objMatricula);
        } else {
            this.arregloMatriculas.add(objMatricula);
        }
        this.vaciarArrayMatricula();
        session.close();
    }

    /** Eliminar Matricula de Alumno*/
    public void removeMatricula() {
        this.arregloMatriculas.remove(this.selectedMatricula);
        this.selectedMatricula = new Object[10];
        this.nuevoAlumno();
    }

    /** Modificar Matricula*/
    public void editMatricula() {
        this.cancelarPago();
        this.vaciarArrayMatricula();
        this.matricula = (Matricula) this.selectedMatricula[0];
        this.personaAlumno = (Persona) this.selectedMatricula[1];
        this.compromisos = (ArrayList<Compromiso>) this.selectedMatricula[2];
        this.recibo = (Recibo) this.selectedMatricula[3];
        this.selectedSeccion = (Long) this.selectedMatricula[4];
        this.record = (Recordanecdotico) this.selectedMatricula[5];
        this.responsable = (Persona) this.selectedMatricula[6];
        this.buscarAlumno = this.personaAlumno.getVcNombres() + " " + this.personaAlumno.getVcApellidos();
        this.boEditarMatricula = true;
        this.asignarRecibo = ((Boolean) this.selectedMatricula[10]).booleanValue();
        this.boMostrarRecibo = ((Boolean) this.selectedMatricula[10]).booleanValue();
        this.arregloDetalles = (ArrayList<Object[]>) this.selectedMatricula[8];
        this.totalPagar = ((Double) this.selectedMatricula[9]).doubleValue();

    }

    /** Vaciar objetos que componen Matricula*/
    public void vaciarArrayMatricula() {
        this.matricula = new Matricula();
        this.personaAlumno = new Persona();
        this.boMostrarRecibo = false;
        this.asignarRecibo = false;
        this.compromiso = new Compromiso();
        this.compromisos = new ArrayList<Compromiso>();
        this.selectedSeccion = null;
        this.arregloPagos = new ArrayList<Object[]>();
        this.recibo = new Recibo();
        this.totalPagar = 0;
        this.arregloDetalles = new ArrayList<Object[]>();
        this.record = new Recordanecdotico();
        this.buscarAlumno = null;
        this.boEditarMatricula = false;
    }

    public void populateListaMatricula() {
        this.listaMatricula = new ArrayList<Object[]>();
        Session session = HibernateUtil.getSessionFactory().openSession();
        String sql = "SELECT m, g, s, a, pa, p, r, n "
                + "FROM Matricula m "
                + "JOIN m.alumno a "
                + "JOIN m.persona p "
                + "JOIN m.recibo r "
                + "JOIN m.seccion s "
                + "JOIN s.grado g "
                + "JOIN g.nivel n "
                + "JOIN a.persona pa "
                + "ORDER BY DATE(m.daFechMatricula) DESC, r.nuNumRecibo DESC";
        this.listaMatricula = (ArrayList<Object[]>) session.createQuery(sql).list();
        session.close();
    }

    /** Eliminar Matricula*/
    public void eliminarMatricula() {
        Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction tx = null;
        this.matricula = (Matricula) this.selectedMatricula[0];
        Matricula s = (Matricula) session.load(Matricula.class, this.matricula.getIdMatricula());
        try {
            tx = (Transaction) session.beginTransaction();
            session.delete(s);
            session.flush();
            session.clear();
            tx.commit();
            this.populateListaMatricula();
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Información:", "Registro eliminado satisfactoriamente"));
        } catch (HibernateException e) {
            tx.rollback();
            FacesUtil.hibernateException(e);
        } finally {
            session.close();
        }
    }

    /** Metodo Imprimir para los recibos*/
    public void imprimir() {
        String contextPath = FacesContext.getCurrentInstance().getExternalContext().getRequestContextPath();
        this.url = contextPath + "/faces/createReportServlet?fileName=";
        String fileName = "reciboSA";
        String tipo = "application/pdf";
        Object[] obj = (Object[]) this.selectedMatricula;
        Matricula tempMatricula = (Matricula) obj[0];

        String params = "&tipo=" + tipo + "&idMatricula=" + tempMatricula.getIdMatricula();
        this.url = this.url + fileName + params;
    }

    /**
     * Getters & Setters
     */
    public Persona getResponsable() {
        return responsable;
    }

    public void setResponsable(Persona responsable) {
        this.responsable = responsable;
    }

    public String getBuscarResponsable() {
        return buscarResponsable;
    }

    public void setBuscarResponsable(String buscarResponsable) {
        this.buscarResponsable = buscarResponsable;
    }

    public Lugtrabajo getLugarTrabResponsable() {
        return lugarTrabResponsable;
    }

    public void setLugarTrabResponsable(Lugtrabajo lugarTrabResponsable) {
        this.lugarTrabResponsable = lugarTrabResponsable;
    }

    public Matricula getMatricula() {
        return matricula;
    }

    public void setMatricula(Matricula matricula) {
        this.matricula = matricula;
    }

    public ArrayList<SelectItem> getGrados() {
        return grados;
    }

    public void setGrados(ArrayList<SelectItem> grados) {
        this.grados = grados;
    }

    public Compromiso getCompromiso() {
        return compromiso;
    }

    public void setCompromiso(Compromiso compromiso) {
        this.compromiso = compromiso;
    }

    public ArrayList<Compromiso> getCompromisos() {
        return compromisos;
    }

    public void setCompromisos(ArrayList<Compromiso> compromisos) {
        this.compromisos = compromisos;
    }

    public Compromiso getSelectedCompromiso() {
        return selectedCompromiso;
    }

    public void setSelectedCompromiso(Compromiso selectedCompromiso) {
        this.selectedCompromiso = selectedCompromiso;
    }

    public String getBuscarAlumno() {
        return buscarAlumno;
    }

    public void setBuscarAlumno(String buscarAlumno) {
        this.buscarAlumno = buscarAlumno;
    }

    public Persona getPersonaAlumno() {
        return personaAlumno;
    }

    public void setPersonaAlumno(Persona personaAlumno) {
        this.personaAlumno = personaAlumno;
    }

    public boolean isAsignarRecibo() {
        return asignarRecibo;
    }

    public void setAsignarRecibo(boolean asignarRecibo) {
        this.asignarRecibo = asignarRecibo;
    }

    public boolean isBoMostrarRecibo() {
        return boMostrarRecibo;
    }

    public void setBoMostrarRecibo(boolean boMostrarRecibo) {
        this.boMostrarRecibo = boMostrarRecibo;
    }

    public Recibo getRecibo() {
        return recibo;
    }

    public void setRecibo(Recibo recibo) {
        this.recibo = recibo;
    }

    public Recordanecdotico getRecord() {
        return record;
    }

    public void setRecord(Recordanecdotico record) {
        this.record = record;
    }

    public Long getSelectedSeccion() {
        return selectedSeccion;
    }

    public void setSelectedSeccion(Long selectedSeccion) {
        this.selectedSeccion = selectedSeccion;
    }

    public ArrayList<Object[]> getArregloMatriculas() {
        return arregloMatriculas;
    }

    public void setArregloMatriculas(ArrayList<Object[]> arregloMatriculas) {
        this.arregloMatriculas = arregloMatriculas;
    }

    public Object[] getSelectedMatricula() {
        return selectedMatricula;
    }

    public void setSelectedMatricula(Object[] selectedMatricula) {
        this.selectedMatricula = selectedMatricula;
    }

    public Detallerecibo getDetalleRecibo() {
        return detalleRecibo;
    }

    public void setDetalleRecibo(Detallerecibo detalleRecibo) {
        this.detalleRecibo = detalleRecibo;
    }

    public Long getSelectedConcepto() {
        return selectedConcepto;
    }

    public void setSelectedConcepto(Long selectedConcepto) {
        this.selectedConcepto = selectedConcepto;
    }

    public ArrayList<Object[]> getArregloDetalles() {
        return arregloDetalles;
    }

    public void setArregloDetalles(ArrayList<Object[]> arregloDetalles) {
        this.arregloDetalles = arregloDetalles;
    }

    public double getTotalPagar() {
        return totalPagar;
    }

    public void setTotalPagar(double totalPagar) {
        this.totalPagar = totalPagar;
    }

    public Object[] getSelectedPago() {
        return selectedPago;
    }

    public void setSelectedPago(Object[] selectedPago) {
        this.selectedPago = selectedPago;
    }

    public ArrayList<Object[]> getArregloPagos() {
        return arregloPagos;
    }

    public void setArregloPagos(ArrayList<Object[]> arregloPagos) {
        this.arregloPagos = arregloPagos;
    }

    public String getDetalleConcepto() {
        return detalleConcepto;
    }

    public void setDetalleConcepto(String detalleConcepto) {
        this.detalleConcepto = detalleConcepto;
    }

    public ArrayList<Object[]> getListaMatricula() {
        return listaMatricula;
    }

    public void setListaMatricula(ArrayList<Object[]> listaMatricula) {
        this.listaMatricula = listaMatricula;
    }

    public Alumno getAlumno() {
        return alumno;
    }

    public void setAlumno(Alumno alumno) {
        this.alumno = alumno;
    }

    public String getUrl() {
        return url;
    }

    public void setUrl(String url) {
        this.url = url;
    }

    public boolean isBoEditarMatricula() {
        return boEditarMatricula;
    }

    public void setBoEditarMatricula(boolean boEditarMatricula) {
        this.boEditarMatricula = boEditarMatricula;
    }

    public boolean isCargarLugTrabajo() {
        return cargarLugTrabajo;
    }

    public void setCargarLugTrabajo(boolean cargarLugTrabajo) {
        this.cargarLugTrabajo = cargarLugTrabajo;
    }

    public boolean isCargarPersona() {
        return cargarPersona;
    }

    public void setCargarPersona(boolean cargarPersona) {
        this.cargarPersona = cargarPersona;
    }

    public boolean isBoInscripcion() {
        return boInscripcion;
    }

    public void setBoInscripcion(boolean boInscripcion) {
        this.boInscripcion = boInscripcion;
    }

    public boolean isShowAddDetalle() {
        return showAddDetalle;
    }

    public void setShowAddDetalle(boolean showAddDetalle) {
        this.showAddDetalle = showAddDetalle;
    }
}
